<%@page contentType="text/html; charset=utf-8"%>
<html>
	 <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
	 <script type="text/javascript">
	 	/*var $=jQuery=function(){
	 		return new jQuery();   //返回类的实例
	 	}
	 	jQuery.fn=jQuery.prototype={
	 		jquery:"1.3.2",		//原型属性
	 		size:function(){	//原型方法
	 			return this.length;
	 		}
	 	}
	 	//alert($().jqery);
	 	alert($().size());*/
	 
	 
	 	
	 	/*var $=jQuery=function(){
	 		return jQuery.fn.init();    //调用原型方法init()
	 	}
	 	jQuery.fn=jQuery.prototype={
	 		init:function(){
	 			return this;     //在初始化原型方法中返回实例的引用
	 		},
	 		jquery:"1.3.2", 
	 		size:function(){
	 			return this.length;
	 		}
	 	}
	 	alert($().jquery);     //调用属性，返回"1.3.2"
	 	alert($().size());		//调用方法，返回undefined*/
	 	
	 	
	 	
	 	//作用域问题  优点：这样可以把init构造器中的this和jQuery中的jQuery.fn对象中的this关键字隔离开来
	 	//		缺点：无法访问jQuery.fn原型对象的jquery属性和size()方法
	 	/*var $=jQuery=function(){
	 		return new jQuery.fn.init();   
	 	}
	 	jQuery.fn=jQuery.prototype={
	 		init:function(){
	 			this.length=0;
	 			this.test=function(){
	 				return this.length;
	 			}
	 			return this;
	 		},
	 		jquery:"1.3.2",
	 		length:1,
	 		size:function(){
	 			return this.length;
	 		}
	 	}
	 	alert($().jquery); 		返回undefined 无法访问jQuery.fn原型对象的jquery属性
	 	alert($().test());
	 	alert($().size());*/
	 	
//解决方案：new jQuery.fn.init()创建的对象拥有init构造器的prototype原型对象的方法，
//通过改变prototype指针的指向，使其指向jQuery类的peototype，这样创建出来的对象就继承了jQuery.fn原型对象定义的方法
	 	var $=jQuery=function(){
	 		return new jQuery.fn.init();   
	 	}
	 	jQuery.fn=jQuery.prototype={
	 		init:function(){
	 			//this.length=0;
	 			this.test=function(){
	 				return this.length;
	 			}
	 			return this;
	 		},
	 		jquery:"1.3.2",
	 		length:1,
	 		size:function(){
	 			return this.length;
	 		}
	 	}
	 	jQuery.fn.init.prototype=jQuery.fn;     //使用jQuery的原型对象覆盖init的原型对象
	 	//alert($().jquery); 		
	 	//alert($().test());
	 	//alert($().size());
	 	alert($().length);
	 </script>
</html>
